<template>
<header class="head-nav">
    <el-row>
        <el-col :span="6" class="logo-container">
            <img src="@/assets/logo.png" class="logo" alt="">
            <span class="title">后台管理系统</span>
        </el-col>
        <el-col :span="6" class="user">
            <div class="userinfo">
                <img class="avatar" :src="createAvatar(40)">
                <div class="welcome">
                    <p class="name comename">欢迎</p>
                    <p class="name avatarname">{{ user.name }}</p>
                </div>
                <span class="username">
                    <!-- 下拉箭头 -->
                    <el-dropdown trigger="click" @command="setDialogInfo">
                        <span class="el-dropdown-link">
                            <i class="el-icon-caret-bottom el-icon--right"></i>
                        </span>
                        <el-dropdown-menu slot="dropdown">
                            <el-dropdown-item command="info">个人信息</el-dropdown-item>
                            <el-dropdown-item command="logout">退出</el-dropdown-item>
                        </el-dropdown-menu>
                    </el-dropdown>
                </span>
            </div>
        </el-col>
    </el-row>
</header>
</template>

<script>
import md5 from 'blueimp-md5'
import Identicon from 'identicon.js'
export default {
    name: 'HeadNav',
    computed: {
        user() {
            return this.$store.getters.user
        }
    },
    methods: {
        setDialogInfo(cmdItem) {
            switch (cmdItem) {
                case 'info': {
                    this.showInfoList()
                    break
                }
                case 'logout': {
                    this.logout()
                    break
                }
            }
        },
        showInfoList() {
            this.$router.push('/infoshow')
        },
        logout() {
            // 清除 token
            localStorage.removeItem('Token')
            // 设置 vuex store
            this.$store.dispatch('clearCurrentState')
            this.$router.push('/login')
        },
        createAvatar(width) {
            let hash = md5(this.user.name)
            let avatar = new Identicon(hash, width).toString()
            avatar = 'data:image/png;base64,' + avatar
            return avatar
        }
    },
}
</script>

<style lang="less" scoped>
.head-nav {
    height: 60px;
    padding: 5px;
    background: #324057;
    color: #fff;
    border-bottom: 1px solid #1f2d3d;

    .logo-container {
        line-height: 60px;
        min-width: 400px;

        .logo {
            height: 50px;
            width: 50px;
            margin-right: 5px;
            vertical-align: middle;
            display: inline-block;
        }

        .title {
            vertical-align: middle;
            font-size: 22px;
            font-family: "Microsoft YaHei";
            letter-spacing: 3px;
        }
    }
    
    .user {
        line-height: 60px;
        text-align: right;
        float: right;
        padding-right: 10px;

        .avatar {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            vertical-align: middle;
            display: inline-block;
        }

        .welcome {
            display: inline-block;
            width: auto;
            vertical-align: middle;
            padding: 0 5px;

            .name {
                line-height: 20px;
                text-align: center;
                font-size: 14px;
            }
            .comename {
                font-size: 12px;
            }
            .avatarname {
                color: #409eff;
                font-weight: bolder;
            }
        }

        .username {
            cursor: pointer;
            margin-right: 5px;

            .el-dropdown {
                color: #fff;
            }
        }
    }
}
</style>